#ifndef _7540E240_6E99_11E1_A1A4_206A8A22A96A
#define _7540E240_6E99_11E1_A1A4_206A8A22A96A

#include <tr1/unordered_set>

namespace utils
{
    class Object
    {
    public:
        Object(Object *parent = 0);
        virtual ~Object();
        
        Object* getParent() const;
        void setParent(Object *newParent);
        
    private:
        Object(Object const&);
        Object& operator = (Object const&);
        
        void addChild(Object *child);
        void removeChild(Object *child);
        
        Object *parent;
        std::tr1::unordered_set<Object*> children;
    };
}

#endif
